package Q3;
//使用线程池将一个目录中的所有内容拷贝到另外一个目录中，包含子目录中的内容

import java.io.*;
import java.util.concurrent.Callable;

public class CopyMoveFiles implements Callable {
    private File copyFile;//复制的文件
    private File pasteFile;//粘贴的目录

    public CopyMoveFiles(File copyFile, File pasteFile) {
        this.copyFile = copyFile;
        this.pasteFile = pasteFile;
    }

    public void copyPasteFile(File copyFile, File pasteFile){
        File newFile = new File(pasteFile.getPath() + "/" + copyFile.getName());
        //如果要复制的文件存在
        if(copyFile.exists()) {
            //如果复制的文件是文件夹
            if (newFile.exists()) {
                //在目标文件夹创建这个文件夹
                System.out.println("文件已存在");
            } else {
                System.out.println(newFile.mkdir()? newFile.getPath()+"创建成功" : "创建失败");
            }
        } else {//如果复制的文件是文件，则进行文件的复制
                BufferedInputStream bis = null;
                BufferedOutputStream bos = null;

                try {
                    bis = new BufferedInputStream(new FileInputStream(copyFile));
                    bos = new BufferedOutputStream(new FileOutputStream(pasteFile + "/" + copyFile.getName()));
                    byte[] arr = new byte[2048];
                    int res = 0;
                    while (true) {
                        bis.read();
                        bos.write(arr, 0, res);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (bis != null) {
                            bis.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        if (bos != null) {
                            bos.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }


    private void pasteFiles(File copyFile, File pasteFile) {
        if (copyFile.exists()) {
            copyPasteFile(copyFile, pasteFile);
            if (copyFile.isDirectory()) {
                //在目标文件夹创建这个文件夹
                File[] lf = copyFile.listFiles();
                if (lf != null) {
                    for (File ff : lf) {
                        pasteFiles(copyFile, new File(pasteFile.getPath()+ "/" + copyFile.getName()));
                    }
                }
            } else {//如果复制的文件是文件，则进行文件的复制
                System.out.println("文件不存在");
            }
        }
    }


    public static void main(String[] args) {
        System.out.println("开始");
    }


    @Override
    public Object call() throws Exception {
        System.out.println("已启动，"+this.copyFile + this.pasteFile);
        copyPasteFile(this.copyFile, this.pasteFile);
        return null;
    }
}
